<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../../style.css" type="text/css" media="screen">
<link rel="stylesheet" href="../../../../print.css" type="text/css" media="print">
<meta content="ICollectionIterator,org.as3commons.collections.framework.ICollectionIterator,current,end,hasPrevious,previous,remove,start" name="keywords">
<title>org.as3commons.collections.framework.ICollectionIterator</title>
</head>
<body>
<script type="text/javascript" language="javascript" src="../../../../asdoc.js"></script><script type="text/javascript" language="javascript" src="../../../../cookies.js"></script><script type="text/javascript" language="javascript">
<!--
				asdocTitle = 'ICollectionIterator - AS3Commons Collections 1.3.2';
				var baseRef = '../../../../';
				window.onload = configPage;
			--></script>
<table style="display:none" id="titleTable" cellspacing="0" cellpadding="0" class="titleTable">
<tr>
<td align="left" class="titleTableTitle">AS3Commons Collections 1.3.2</td><td align="right" class="titleTableTopNav"><a onclick="loadClassListFrame('../../../../all-classes.html')" href="../../../../package-summary.html">All&nbsp;Packages</a>&nbsp;|&nbsp;<a onclick="loadClassListFrame('../../../../all-classes.html')" href="../../../../class-summary.html">All&nbsp;Classes</a>&nbsp;|&nbsp;<a onclick="loadClassListFrame('../../../../index-list.html')" href="../../../../all-index-A.html">Index</a>&nbsp;|&nbsp;<a href="../../../../index.html?org/as3commons/collections/framework/ICollectionIterator.html&amp;org/as3commons/collections/framework/class-list.html" id="framesLink1">Frames</a><a onclick="parent.location=document.location" href="" style="display:none" id="noFramesLink1">No&nbsp;Frames</a></td><td rowspan="3" align="right" class="titleTableLogo"><img alt="Adobe Logo" title="Adobe Logo" class="logoImage" src="../../../../images/logo.jpg"></td>
</tr>
<tr class="titleTableRow2">
<td align="left" id="subTitle" class="titleTableSubTitle">Interface&nbsp;ICollectionIterator</td><td align="right" id="subNav" class="titleTableSubNav"><a href="#propertySummary">Properties</a>&nbsp;| <a href="#methodSummary">Methods</a></td>
</tr>
<tr class="titleTableRow3">
<td colspan="2">&nbsp;</td>
</tr>
</table>
<script type="text/javascript" language="javascript">
<!--
if (!isEclipse() || window.name != ECLIPSE_FRAME_NAME) {titleBar_setSubTitle("Interface ICollectionIterator"); titleBar_setSubNav(false,true,false,false,false,false,true,false,false,false,false,false,false,false);}
--></script>
<div class="MainContent">
<table cellspacing="0" cellpadding="0" class="classHeaderTable">
<tr>
<td class="classHeaderTableLabel">Package</td><td><a onclick="javascript:loadClassListFrame('class-list.html')" href="package-detail.html">org.as3commons.collections.framework</a></td>
</tr>
<tr>
<td class="classHeaderTableLabel">Interface</td><td class="classSignature">public interface ICollectionIterator extends <a href="IIterator.html">IIterator</a></td>
</tr>
<tr>
<td class="classHeaderTableLabel">Subinterfaces</td><td><a href="../framework/IBinarySearchTreeIterator.html">IBinarySearchTreeIterator</a>, <a href="../framework/ILinkedListIterator.html">ILinkedListIterator</a>, <a href="../framework/IListIterator.html">IListIterator</a>, <a href="../framework/IMapIterator.html">IMapIterator</a>, <a href="../framework/ISetIterator.html">ISetIterator</a></td>
</tr>
<tr>
<td class="classHeaderTableLabel">Implementors</td><td><a href="core/AbstractLinkedCollectionIterator.html">AbstractLinkedCollectionIterator</a>, <a href="core/AbstractSortedCollectionIterator.html">AbstractSortedCollectionIterator</a>, <a href="../iterators/CollectionFilterIterator.html">CollectionFilterIterator</a></td>
</tr>
</table>
<p></p>
  Base collection iterator definition.
  
  <p><strong>Description</strong></p>
  
  <p>An <code>ICollectionIterator</code> is an iterator with extended navigation and
  modification possibilities.</p>
  
  <p><strong>Features</strong></p>
  
  <ul>
  <li>Resetting the cursor before the first or after the last item.<br />
  <code>start(), end()</code></li>
  <li>Retrieving items in the back direction.<br />
  <code>hasPrevious(), previous()</code></li>
  <li>Caching of the last returned item.<br />
  <code>current</code></li>
  <li>Removing of items during the iteration.<br />
  <code>remove()</code></li>
  </ul>
  
  <p><strong>Cursor and current element</strong></p>
  
  <p>The internal cursor of an <code>ICollectionIterator</code> can have n + 1 positions: Before the
  first item, between two items and after the last item. To each possible cursor position
  is a next and a previous item defined (except to the start and end position where either
  a next or a previous item is defined).</p>
  
  <table class="innertable">
  
  <tr>
  <th>Position</th>
  <th>Iterator state</th>
  </tr>
  
  <tr>
  <td>At start</td>
  <td><pre> ^  1  2  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>Between two items</td>
  <td><pre> 1  2  ^  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>At end</td>
  <td><pre> 1  2  3  4  ^ </pre></td>
  </tr>
  
  </table>
  ^ = cursor
  
  <p>A current element is available only after a prior <code>next()</code> or
  <code>previous()</code> call. The current item is nullified after all operations
  that modify the underlying collection order (<code>add(), remove()</code>)
  or the cursor position (<code>start(), end()</code>).</p>
  
  <table class="innertable">
  
  <tr>
  <th>Operation</th>
  <th>Return value</th>
  <th>Current item</th>
  <th>Iterator state</th>
  </tr>
  
  <tr>
  <td>initial</td>
  <td></td>
  <td>undefined</td>
  <td><pre> ^  1  2  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>next()</td>
  <td>1</td>
  <td>1</td>
  <td><pre>[1] ^  2  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>next()</td>
  <td>2</td>
  <td>2</td>
  <td><pre> 1 [2] ^  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>remove()</td>
  <td>true</td>
  <td>undefined</td>
  <td><pre> 1  ^  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>remove()</td>
  <td>false</td>
  <td>undefined</td>
  <td><pre> 1  ^  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>next()</td>
  <td>3</td>
  <td>3</td>
  <td><pre> 1 [3] ^  4 </pre></td>
  </tr>
  
  <tr>
  <td>start()</td>
  <td></td>
  <td>undefined</td>
  <td><pre> ^  1  3  4 </pre></td>
  </tr>
  
  </table>
  ^ = cursor, [n] = current
  
  <p>Subsequent calls to <code>next()</code> and <code>previous()</code> return
  the same item repeatedly since the cursor is placed alternately after or before
  the item that is returned.</p>
  
  <table class="innertable">
  
  <tr>
  <th>Operation</th>
  <th>Return value</th>
  <th>Current item</th>
  <th>Iterator state</th>
  </tr>
  
  <tr>
  <td>initial</td>
  <td></td>
  <td>undefined</td>
  <td><pre> 1  2  ^  3  4 </pre></td>
  </tr>
  
  <tr>
  <td>next()</td>
  <td>3</td>
  <td>3</td>
  <td><pre> 1  2 [3] ^  4 </pre></td>
  </tr>
  
  <tr>
  <td>previous()</td>
  <td>3</td>
  <td>3</td>
  <td><pre> 1  2  ^ [3] 4 </pre></td>
  </tr>
  
  <tr>
  <td>next()</td>
  <td>3</td>
  <td>3</td>
  <td><pre> 1  2 [3] ^  4 </pre></td>
  </tr>
  
  </table>
  ^ = cursor, [n] = current
  
  <p id="link_CollectionIteratorExample"><strong>Collection iterator example</strong></p>
  
  <a class="exampleCollapsed" href="#link_CollectionIteratorExample" onClick="toggleExample(this, 'CollectionIteratorExample');">Show example</a><br /><div id="CollectionIteratorExample" style='display:none'><div class='listing'><pre>package {
    import org.as3commons.collections.ArrayList;
    import org.as3commons.collections.framework.ICollectionIterator;
    import flash.display.Sprite;

    public class CollectionIteratorExample extends Sprite {

        public function CollectionIteratorExample() {
            var list : ArrayList = new ArrayList();
            var iterator : ICollectionIterator;
            var item : 
            
            // ^ = cursor, [n] = current
            
            // Navigation
            
            list.array = [1, 2, 3];
            iterator = list.iterator() as ICollectionIterator;
            
                                      //  ^  1  2  3
            iterator.next();          // [1] ^  2  3
            iterator.next();          //  1 [2] ^  3
            iterator.next();          //  1  2 [3] ^
            iterator.next();          //  1  2  3  ^
            iterator.previous();      //  1  2  ^ [3]
            iterator.previous();      //  1  ^ [2] 3
            iterator.previous();      //  ^ [1] 2  3
            iterator.previous();      //  ^  1  2  3

            iterator.next();          // [1] ^  2  3
            iterator.next();          //  1 [2] ^  3
            iterator.start();         //  ^  1  2  3

            iterator.next();          // [1] ^  2  3
            iterator.next();          //  1 [2] ^  3
            iterator.end();           //  1  2  3  ^
            
            // Current item

            iterator = list.iterator() as ICollectionIterator;

            trace (iterator.current);   // undefined
            iterator.next();
            trace (iterator.current);   // 1
            iterator.next();
            trace (iterator.current);   // 2
            iterator.next();
            trace (iterator.current);   // 3
            iterator.next();
            trace (iterator.current);   // undefined

            // Remove

            list.array = [1, 2, 3];
            iterator = list.iterator() as ICollectionIterator;
            
                                      //  ^  1  2  3
            iterator.next();          // [1] ^  2  3
            iterator.next();          //  1 [2] ^  3
            iterator.remove();        //  1  ^  3
            iterator.next();          //  1 [3] ^
            iterator.remove();        //  1  ^
            iterator.remove();        //  1  ^

            // Remove during iteration

            list.array = [1, 2, 3, 4, 5];
            iterator = list.iterator() as ICollectionIterator;
            while (iterator.hasNext()) {
                item = iterator.next();
                trace (item); // 1,2,3,4,5

                if (item == 1) iterator.remove();   //  ^  2  3  4  5
                if (item == 3) iterator.remove();   //  2  ^  4  5
                if (item == 5) iterator.remove();   //  2  4  ^
            }
            trace (list.toArray()); // 2,4

            // Reverse iteration

            list.array = [1, 2, 3, 4, 5];
            iterator = list.iterator() as ICollectionIterator;
            iterator.end();
            while (iterator.hasPrevious()) {
                trace (iterator.previous()); // 5,4,3,2,1
            }
        }
    }
}
</pre></div></div>
  
  <p></p>
<p>
<span class="classHeaderTableLabel">See also</span>
</p>
<div class="seeAlso">
<a href="IIterator.html" target="">IIterator interface - Description of the basic iterator features.</a>
</div>
<br>
<hr>
</div>
<a name="propertySummary"></a>
<div class="summarySection">
<div class="summaryTableTitle">Public Properties</div>
<table id="summaryTableProperty" class="summaryTable " cellpadding="3" cellspacing="0">
<tr>
<th>&nbsp;</th><th colspan="2">Property</th><th class="summaryTableOwnerCol">Defined&nbsp;by</th>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol"><a class="signatureLink" href="#current">current</a> : *<div class="summaryTableDescription">[read-only]
   The item that most recently has been returned by <code>next()</code>
   or <code>previous()</code>.</div>
</td><td class="summaryTableOwnerCol">ICollectionIterator</td>
</tr>
</table>
</div>
<a name="methodSummary"></a>
<div class="summarySection">
<div class="summaryTableTitle">Public Methods</div>
<div class="showHideLinks">
<div class="hideInheritedMethod" id="hideInheritedMethod">
<a onclick="javascript:setInheritedVisible(false,'Method');" href="#methodSummary" class="showHideLink"><img src="../../../../images/expanded.gif" class="showHideLinkImage"> Hide Inherited Public Methods</a>
</div>
<div class="showInheritedMethod" id="showInheritedMethod">
<a onclick="javascript:setInheritedVisible(true,'Method');" href="#methodSummary" class="showHideLink"><img src="../../../../images/collapsed.gif" class="showHideLinkImage"> Show Inherited Public Methods</a>
</div>
</div>
<table id="summaryTableMethod" class="summaryTable " cellpadding="3" cellspacing="0">
<tr>
<th>&nbsp;</th><th colspan="2">Method</th><th class="summaryTableOwnerCol">Defined&nbsp;by</th>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#end()">end</a>():void</div>
<div class="summaryTableDescription">
   Resets the iterator to the position after the last item.</div>
</td><td class="summaryTableOwnerCol">ICollectionIterator</td>
</tr>
<tr class="hideInheritedMethod">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol"><img class="inheritedSummaryImage" title="Inherited" alt="Inherited" src="../../../../images/inheritedSummary.gif"></td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="IIterator.html#hasNext()">hasNext</a>():Boolean</div>
<div class="summaryTableDescription">
   Returns <code>true</code> if there are succeeding items to be enumerated.</div>
</td><td class="summaryTableOwnerCol"><a href="IIterator.html">IIterator</a></td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#hasPrevious()">hasPrevious</a>():Boolean</div>
<div class="summaryTableDescription">
   Returns <code>true</code> if there are preceeding items to be enumerated.</div>
</td><td class="summaryTableOwnerCol">ICollectionIterator</td>
</tr>
<tr class="hideInheritedMethod">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol"><img class="inheritedSummaryImage" title="Inherited" alt="Inherited" src="../../../../images/inheritedSummary.gif"></td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="IIterator.html#next()">next</a>():*</div>
<div class="summaryTableDescription">
   Returns the next item and places the internal cursor after that item.</div>
</td><td class="summaryTableOwnerCol"><a href="IIterator.html">IIterator</a></td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#previous()">previous</a>():*</div>
<div class="summaryTableDescription">
   Returns the previous item and places the internal cursor before that item.</div>
</td><td class="summaryTableOwnerCol">ICollectionIterator</td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#remove()">remove</a>():Boolean</div>
<div class="summaryTableDescription">
   Removes the current item from the collection if any.</div>
</td><td class="summaryTableOwnerCol">ICollectionIterator</td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#start()">start</a>():void</div>
<div class="summaryTableDescription">
   Resets the iterator to the position before the first item.</div>
</td><td class="summaryTableOwnerCol">ICollectionIterator</td>
</tr>
</table>
</div>
<script type="text/javascript" language="javascript">
<!--
showHideInherited();
--></script>
<div class="MainContent">
<a name="propertyDetail"></a>
<div class="detailSectionHeader">Property detail</div>
<a name="current"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">current</td><td class="detailHeaderType">property</td>
</tr>
</table>
<div class="detailBody">
<code>current:*</code>&nbsp;&nbsp;[read-only]<p>
   The item that most recently has been returned by <code>next()</code>
   or <code>previous()</code>.
   
   </p><p>Returns <code>undefined</code> if the iterator points to the postion before the first
   or after the last item or the collection is empty.</p>
   
   <p>The current item is nullified after all operations that modify the underlying
   collection order (<code>add(), remove()</code>) or modify the cursor position
   (<code>start(), end()</code>).</p>
   
   <p>Returns initially <code>undefined</code>.</p>
   
   <span class="label">Implementation</span>
<br>
<code>&nbsp;&nbsp;&nbsp;&nbsp;public function get current():*</code>
<br>
</div>
<a name="methodDetail"></a>
<div class="detailSectionHeader">Method detail</div>
<a name="end()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">end</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">method</td>
</tr>
</table>
<div class="detailBody">
<code>public function end():void</code><p>
   Resets the iterator to the position after the last item.
   
   </p><p>The last item of the collection is then returned with a subsequent
   call to <code>previous()</code>.</p>
   </div>
<a name="hasPrevious()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">hasPrevious</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">method</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public function hasPrevious():Boolean</code><p>
   Returns <code>true</code> if there are preceeding items to be enumerated.
   
   </p><p>Returns <code>false</code>, if the internal cursor is placed before the
   first item or the collection is empty.</p>
   
   <p></p>
<span class="label">Returns</span>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"></td><td><code>Boolean</code> &mdash; <code>true</code> if there are items left to be enumerated.
   </td>
</tr>
</table>
</div>
<a name="previous()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">previous</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">method</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public function previous():*</code><p>
   Returns the previous item and places the internal cursor before that item. 
   
   </p><p>Returnes <code>undefined</code> if no previous item exists or the collection is empty.</p>
   
   <p></p>
<span class="label">Returns</span>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"></td><td><code>*</code> &mdash; The previous item of iteration or <code>undefined</code> if no such item exists.
   </td>
</tr>
</table>
</div>
<a name="remove()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">remove</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">method</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public function remove():Boolean</code><p>
   Removes the current item from the collection if any.
   
   </p><p></p>
<span class="label">Returns</span>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"></td><td><code>Boolean</code> &mdash; <code>true</code> if an item has been removed.
   </td>
</tr>
</table>
</div>
<a name="start()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">start</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">method</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public function start():void</code><p>
   Resets the iterator to the position before the first item.
   
   </p><p>The first item of the collection is then returned with a subsequent
   call to <code>next()</code>.</p>
   </div>
<br>
<br>
<hr>
<br>
<p></p>
<center class="copyright"> 
</center>
</div>
</body>
</html>
<!-- -->
